package com.ojoin.trade.supplyloan_core.web.service.impl.catchdata.webclient;
//
//import java.text.DateFormat;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Map;
//
//import org.htmlparser.NodeFilter;
//import org.htmlparser.Parser;
//import org.htmlparser.filters.TagNameFilter;
//import org.htmlparser.tags.TableColumn;
//import org.htmlparser.tags.TableRow;
//import org.htmlparser.tags.TableTag;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.context.annotation.Scope;
//import org.springframework.stereotype.Service;
//
//import com.gargoylesoftware.htmlunit.html.HtmlForm;
//import com.gargoylesoftware.htmlunit.html.HtmlImage;
//import com.gargoylesoftware.htmlunit.html.HtmlPage;
//import com.ojoin.trade.common.exception.BusinessException;
//import com.ojoin.trade.common.utils.LogUtils;
//import com.ojoin.trade.common.utils.TimeUtils;
//import com.ojoin.trade.supplyloan_core.web.domain.TbCatchdataStrategy;
//import com.ojoin.trade.supplyloan_core.web.domain.TbSlPlatformUser;
//import com.ojoin.trade.supplyloan_core.web.domain.TbSlSupplyInventory;
//import com.ojoin.trade.supplyloan_core.web.domain.TbSlSupplyPayment;
//import com.ojoin.trade.supplyloan_core.web.service.impl.catchdata.WebClientSLDataCatchBaseServiceImpl;
//
///**
// * 中粮我买网供应商平台数据抓取服务
// * 
// * 抓取数据逻辑： 1、已出结算单未付款数据：在未结算清单页面抓取未付款和未核对的单据
// * 2、采购入库未结算数据：根据结算单最大日期查询其上个月15号之后的采购入库单，抓取采购订单id不在已出结算单中的采购订单
// * 
// * @author guoting
// * 
// */
//
//
//public class SupplierWOMAIDataCatchServiceImpl extends
//		WebClientSLDataCatchBaseServiceImpl {
//
//	// 验证码重试
//	private static int verifycodeRetryCount = 3;
//
//	private String contractHtmlStr = null;
//	private Logger log = LoggerFactory
//			.getLogger(SupplierWOMAIDataCatchServiceImpl.class);
//	private Parser parser = null;
//
//	public SupplierWOMAIDataCatchServiceImpl() {
//
//	}
//
//	public SupplierWOMAIDataCatchServiceImpl(TbSlPlatformUser platformUser) {
//		super(platformUser);
//	}
//
//	public int getDefaultDriverTimeOut() {
//		return 5;
//	}
//
//	HashMap<String, String> balanceLinkMap = new HashMap<String, String>();
//
//	@Override
//	public boolean LoginByUserInfo(String baseUrl, String username,
//			String password) throws BusinessException {
//		if (isCacheLogin()) {
//			loginFlag = true;
//			return loginFlag;
//		}
//
//		try {
//			LogUtils.info(log, "baseurl->" + baseUrl);
//			HtmlPage loginPage = getWebClient().getPage(baseUrl);
//			LogUtils.info(log, "loginPageTitle->" + loginPage.getTitleText());
//
//			// hi.saveAs(new File(VerityCodeUtils.VerifyImgPath));
//
//			HtmlForm hf = (HtmlForm) loginPage.getElementById("fm1");
//			hf.getInputByName("username").setValueAttribute(username);
//			hf.getInputByName("password").setValueAttribute(password);
//			int loginCount = 1;
//			// String code = getVerifyCode(VerifyImgPath);
//			/*
//			 * String code = VerityCodeUtils.getVerifyCode(
//			 * VerityCodeUtils.VERIFYTYPE_FILE, VerityCodeUtils.VerifyImgPath,
//			 * null);
//			 */
//
//			while (loginCount < verifycodeRetryCount) {
//
//				loginCount++;
//
//				this.verifycode(loginPage, hf);
//				// 记录验证码请求次数
//
//				loginPage.getElementById("doLogin").click();
//
//				HtmlPage userPage = getWebClient().getPage(
//						"http://i.womaiapp.com/index.action");
//				String title = userPage.getTitleText();
//
//				if (title.equals("中粮我买网供应链管理系统")) {
//					loginFlag = true;
//					break;
//
//				}
//			}
//
//		} catch (Exception e) {
//			throw new BusinessException(e.getMessage(), e);
//		}
//		return loginFlag;
//	}
//
//	public void verifycode(HtmlPage loginPage, HtmlForm hf)
//			throws BusinessException {
//		
//
//		HtmlImage hi = (HtmlImage) loginPage.getElementById("captchaImg");
//
//		String code = getMyWebClient().getVerifyCode(hi);
//
//		LogUtils.info(log, "verify code: " + code);
//
//		hf.getInputByName("captcha").setValueAttribute(code);
//
//		LogUtils.info(log, getPlatformUser().getPlatformName() + " 登陆界面包含验证码.");
//
//	}
//
//	@Override
//	public boolean afterCatchData() throws BusinessException {
//		// getWebClient().close();
//		return true;
//	}
//
//	@Override
//	public String catchSupplierName() throws BusinessException {
//		try {
//			String contractUrl = "http://supplier.i.womaiapp.com/update/getContractList.action";
//			if (contractHtmlStr == null) {
//				contractHtmlStr = getContractHtmlStr(contractUrl);
//			}
//
//			return getSupplyInfoByUrl(contractHtmlStr, 1);
//		} catch (Exception e) {
//			throw new BusinessException(e.getMessage(), e);
//		}
//	}
//
//	@Override
//	public String catchSupplierAccount() throws BusinessException {
//		try {
//			String contractUrl = "http://supplier.i.womaiapp.com/update/getContractList.action";
//			if (contractHtmlStr == null) {
//				contractHtmlStr = getContractHtmlStr(contractUrl);
//			}
//			return getSupplyInfoByUrl(contractHtmlStr, 12);
//		} catch (Exception e) {
//			throw new BusinessException(e.getMessage(), e);
//		}
//	}
//
//	private String getContractHtmlStr(String url) {
//		String htmlStr = null;
//		try {
//			com.gargoylesoftware.htmlunit.html.HtmlPage page = getWebClient()
//					.getPage(url);
//			htmlStr = page.getBody().asXml();
//			parser = new Parser();
//			parser.setInputHTML(htmlStr);
//			org.htmlparser.visitors.HtmlPage htmlPage = new org.htmlparser.visitors.HtmlPage(
//					parser);
//			parser.visitAllNodesWith(htmlPage);
//
//			TableTag[] tables = htmlPage.getTables();
//			if (tables == null || tables.length == 0)
//				return null;
//
//			TableRow[] rows = tables[0].getRows();
//			if (rows == null || rows.length == 0)
//				return null;
//
//			TableColumn[] cols = rows[1].getColumns();
//			String plainno = cols[0].toPlainTextString().trim();
//			String linkUrl = "http://supplier.i.womaiapp.com/update/getContractById.action?id="
//					+ plainno;
//			page = getWebClient().getPage(linkUrl);
//			htmlStr = page.getBody().asXml();
//		} catch (Exception e) {
//			LogUtils.error(log, e);
//		}
//		return htmlStr;
//	}
//
//	private String getSupplyInfoByUrl(String htmlStr, int index) {
//		try {
//			parser.setInputHTML(htmlStr);
//			NodeFilter filter = new TagNameFilter("P");
//			org.htmlparser.util.NodeList nodes = parser
//					.extractAllNodesThatMatch(filter);
//			if (nodes == null || nodes.size() == 0)
//				return null;
//			// [1]是公司名 [12]是银行账户
//			org.htmlparser.Node textnode = (org.htmlparser.Node) nodes
//					.elementAt(index);
//			org.htmlparser.util.NodeList children = textnode.getChildren();
//			if (children == null || children.size() == 0)
//				return null;
//			org.htmlparser.Node child = (org.htmlparser.Node) children
//					.elementAt(children.size() - 1);
//			return child.getText().trim();
//		} catch (Exception e) {
//			LogUtils.error(log, e);
//		}
//		return null;
//	}
//
//	@Override
//	public boolean getUnpayAccountData() throws BusinessException {
//
//		Map<String, TbSlSupplyPayment> map = null;
//		if (this.getCatchdataStrategy().getIsInit()
//				.equals(TbCatchdataStrategy.inited)) {
//
//			map = getPaymentService()
//					.queryByUid(this.getPlatformUser().getId());
//
//		}
//
//		List<TbSlSupplyPayment> list = new ArrayList<TbSlSupplyPayment>();
//		try {
//			String balanceUrl = "http://supplier.i.womaiapp.com/statement/queryStatementList.action";
//			HtmlPage ordersPage = getWebClient().getPage(balanceUrl);
//			String htmlStr = ordersPage.getBody().asXml();
//
//			parser = new Parser();
//			parser.setInputHTML(htmlStr);
//			org.htmlparser.visitors.HtmlPage htmlPage = new org.htmlparser.visitors.HtmlPage(
//					parser);
//			parser.visitAllNodesWith(htmlPage);
//			TableTag[] tables = htmlPage.getTables();
//			if (tables == null || tables.length < 2)
//				return true;
//
//			TableRow[] rows = tables[1].getRows();
//			if (rows == null || rows.length < 3)
//				return true;
//
//			for (int r = 2; r < rows.length; r++) {
//				TableColumn[] cols = rows[r].getColumns();
//				String settlement_state = cols[10].toPlainTextString().trim();
//				String create_date = cols[11].toPlainTextString().trim();
//
//				String settlement_state_int = "";
//				if (settlement_state.equals("已付款")) {
//					continue;
//				} else if (settlement_state.equals("未核对")) {
//					settlement_state_int = TbSlSupplyPayment.WAITPAY;
//
//				} else if (settlement_state.equals("待付款")) {
//					settlement_state_int = TbSlSupplyPayment.WAITPAY;
//				} else if (settlement_state.equals("财务审核通过")) {
//					settlement_state_int = TbSlSupplyPayment.WAITPAY;
//				}
//				String settlement_id = cols[1].toPlainTextString().trim();
//				String amount = cols[2].toPlainTextString().trim();
//
//				String balancelink = cols[12].getChild(1).getText().split("\"")[1];
//				balanceLinkMap.put(create_date,
//						"http://supplier.i.womaiapp.com/statement/"
//								+ balancelink);
//
//				TbSlSupplyPayment paymentvo = new TbSlSupplyPayment();
//				paymentvo.setPlatformAccountId(getPlatformUser().getId());
//				paymentvo.setSettlementId(settlement_id);
//				paymentvo.setSettlementState(settlement_state_int);
//
//				long longamount = getLongAmount(amount);
//
//				paymentvo.setAmount(longamount);
//
//				paymentvo.setCreateDate(create_date);
//
//				if (null != map && null != map.get(paymentvo.getSettlementId())) {
//					map.remove(paymentvo.getSettlementId());
//				} else {
//					list.add(paymentvo);
//				}
//
//				LogUtils.info(log, "settlement_id->" + settlement_id + ","
//						+ "amount->" + amount + "," + "settlement_state->"
//						+ settlement_state + "," + "create_date->"
//						+ create_date + ",");
//			}
//
//			if (null != map) {
//				Collection<TbSlSupplyPayment> co = map.values();
//				Iterator<TbSlSupplyPayment> it = co.iterator();
//				while (it.hasNext()) {
//					TbSlSupplyPayment tbsl = it.next();
//					tbsl.setRowUpdateTime(null);
//					tbsl.setSettlementState(TbSlSupplyPayment.COMPLETEPAY);
//					tbsl.setIsnew(TbSlSupplyPayment.ISNEW);
//					getPaymentService().updateById(tbsl);
//				}
//			}
//
//			getPaymentService().insertInBatch(list);
//
//		} catch (Exception e) {
//			throw new BusinessException(e.getMessage(), e);
//		}
//		return true;
//	}
//
//	private List<String> getPurchaseOrderIDsByBalanceUrl(String linkUrl) {
//		try {
//			HtmlPage ordersPage = getWebClient().getPage(linkUrl);
//			String htmlStr = ordersPage.getBody().asXml();
//
//			if (parser == null)
//				parser = new Parser();
//			parser.setInputHTML(htmlStr);
//			org.htmlparser.visitors.HtmlPage htmlPage = new org.htmlparser.visitors.HtmlPage(
//					parser);
//			parser.visitAllNodesWith(htmlPage);
//			TableTag[] tables = htmlPage.getTables();
//			if (tables == null || tables.length < 2)
//				return null;
//
//			TableRow[] rows = tables[3].getRows();
//			if (rows == null || rows.length == 0)
//				return null;
//
//			List<String> purchaseids = new ArrayList<String>();
//			int i = 0;
//			for (TableRow row : rows) {
//				if (i++ == 0)
//					continue;
//				purchaseids.add(row.getColumns()[4].toPlainTextString().trim());
//			}
//			return purchaseids;
//		} catch (Exception e) {
//			LogUtils.error(log, e);
//		}
//		return null;
//	}
//
//	public String getLastMonthMiddleDate(String maxdate) {
//		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//		try {
//			Date dt = df.parse(maxdate);
//			Date returndate = new Date(dt.getYear(), dt.getMonth() - 1, 15);
//			return df.format(returndate);
//		} catch (Exception e) {
//			LogUtils.error(log, e);
//		}
//		return null;
//	}
//
//	public int compare_date(String date1, String date2) {
//		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//		try {
//			Date dt1 = df.parse(date1);
//			Date dt2 = df.parse(date2);
//			if (dt1.getTime() > dt2.getTime()) {
//				LogUtils.info(log, date1 + "在" + date2 + "前");
//				return 1;
//			} else if (dt1.getTime() < dt2.getTime()) {
//				LogUtils.info(log, date1 + "在" + date2 + "后");
//				return -1;
//			} else {
//				return 0;
//			}
//		} catch (Exception e) {
//			LogUtils.error(log, e);
//		}
//		return 0;
//	}
//
//	@Override
//	public boolean getInstoreOrderData() throws BusinessException {
//		if (balanceLinkMap == null || balanceLinkMap.size() == 0)
//			return true;
//
//		// 查询多个未付款的结算单中最大日期，和最大日期对应的结算单页面链接
//		Iterator<String> iterator = balanceLinkMap.keySet().iterator();
//		String maxdate = null;
//		while (iterator.hasNext()) {
//			String eachdate = iterator.next();
//			if (maxdate == null || compare_date(eachdate, maxdate) == 1)
//				maxdate = eachdate;
//		}
//
//		String maxdate_linkurl = balanceLinkMap.get(maxdate);
//		String lastMonthDate = getLastMonthMiddleDate(maxdate);
//
//		List<String> purchaseOrderIDsInBalance = getPurchaseOrderIDsByBalanceUrl(maxdate_linkurl);
//
//		return catchPurchaseOrderDataExcludeBalance(purchaseOrderIDsInBalance,
//				lastMonthDate);
//	}
//
//	private boolean catchPurchaseOrderDataExcludeBalance(
//			List<String> purchaseOrderIDsInBalance, String lastMonthDate) {
//		List<TbSlSupplyInventory> list = new ArrayList<TbSlSupplyInventory>();
//		LogUtils.info(log, "lastMonthDate->" + lastMonthDate);
//
//		int pageno = 1;
//		String eachOrderDate = TimeUtils.getCurDate();
//		try {
//			while (compare_date(eachOrderDate, lastMonthDate) == 1) {
//				String purchaseOrderUrl = "http://procurement.i.womaiapp.com/pro/procurementOrderList.action?orderType=-1&fresh=-1&page="
//						+ pageno++;
//				LogUtils.info(log, "purchaseOrderUrl->" + purchaseOrderUrl);
//				HtmlPage ordersPage = getWebClient().getPage(purchaseOrderUrl);
//				String htmlStr = ordersPage.getBody().asXml();
//
//				if (parser == null)
//					parser = new Parser();
//				parser.setInputHTML(htmlStr);
//				org.htmlparser.visitors.HtmlPage htmlPage = new org.htmlparser.visitors.HtmlPage(
//						parser);
//				parser.visitAllNodesWith(htmlPage);
//				TableTag[] tables = htmlPage.getTables();
//				if (tables == null || tables.length < 2)
//					return true;
//
//				TableRow[] rows = tables[1].getRows();
//				if (rows == null || rows.length == 0)
//					return true;
//
//				int i = 0;
//
//				for (TableRow row : rows) {
//					if (i++ == 0)
//						continue;
//
//					String receiveStatus = row.getColumns()[3]
//							.toPlainTextString().trim();
//					String validateStatus = row.getColumns()[4]
//							.toPlainTextString().trim();
//					String storedate = row.getColumns()[9].toPlainTextString()
//							.trim();
//					String itemid = row.getColumns()[1].toPlainTextString()
//							.trim();
//					LogUtils.info(log, "itemid->" + itemid);
//					eachOrderDate = storedate;
//					// 收货状态正确、有效状态正确、采购日期在最大结算上月15号日期后、采购订单号不包括在结算单中
//					if (receiveStatus != null
//							&& (receiveStatus.equals("部分收货") || receiveStatus
//									.equals("完全收货")) && validateStatus != null
//							&& validateStatus.equals("有效")
//							&& compare_date(storedate, lastMonthDate) == 1
//							&& !purchaseOrderIDsInBalance.contains(itemid)) {
//						LogUtils.info(log, "insert itemid->" + itemid);
//						String ordercost = row.getColumns()[15]
//								.toPlainTextString().trim();
//
//						TbSlSupplyInventory vo = new TbSlSupplyInventory();
//						vo.setPlatformAccountId(getPlatformUser().getId());
//						vo.setItemId(itemid);
//						long longordercost = getLongAmount(ordercost);
//						vo.setTotalCost(longordercost + "");
//						vo.setStoreDate(storedate);
//
//						list.add(vo);
//
//					}
//				}
//
//			}
//			return true;
//
//		} catch (Exception e) {
//			LogUtils.error(log, e);
//		}
//		getInventoryService().insertInBatch(list);
//		return true;
//	}
//
//	@Override
//	public void verifycode() throws BusinessException {
//
//	}
//
//	@Override
//	public void saveCookies() {
//
//	}
//
//	@Override
//	public void closeCatchData(boolean isuser) throws BusinessException {
//		// MyHttpClient.close();
//
//	}
//
//	@Override
//	public void closeCatchData(boolean islogin, boolean isuser) {
//		// this.getMyCloseableHttpClient().setIslogin(islogin);
//		closeCatchData(isuser);
//	}
//
//	@Override
//	public boolean getPayAccountData() throws BusinessException {
//		
//		return true;
//	}
//
//	@Override
//	public boolean getOutstoreOrderData() throws BusinessException {
//		
//		return true;
//	}
//
//}
